home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / Icon 8.1 / msm-1 / common.sit / doincl.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-09-19  |  1.9 KB  |  77 lines  |  [TEXT/MPS ]

  1. /*
  2.  * doincl.c -- expand include directives (recursively)
  3.  *
  4.  *  Usage:  doinclude [-o outfile] filename...
  5.  *
  6.  *  Doinclude copies a C source file, expanding non-system include directives.
  7.  *  For each line of the form
  8.  *    #include "filename"
  9.  *  the named file is interpolated; all other lines are copied verbatim.
  10.  *
  11.  *  No error is generated if a file cannot be opened.
  12.  */
  13.  
  14. #include "::h:rt.h"
  15.  
  16. int    doinclude    Params((char *fname));
  17.  
  18. #define MAXLINE 500    /* maximum line length */
  19.  
  20. FILE *outfile;        /* output file */
  21.  
  22. main(argc, argv)
  23. int argc;
  24. char *argv[];
  25.    {
  26.    char *progname = argv[0];
  27.  
  28.    outfile = stdout;
  29.    if (argc > 3 && strcmp(argv[1], "-o") == 0) {
  30.       if (outfile = fopen(argv[2], "w")) {
  31.          argv += 2;
  32.          argc -= 2;
  33.          }
  34.       else {
  35.          perror(argv[2]);
  36.          exit(1);
  37.          }
  38.       }
  39.    if (argc < 2) {
  40.       fprintf(stderr, "usage: %s [-o outfile] filename...\n", progname);
  41.       exit(1);
  42.       }
  43.  
  44.    fprintf(outfile,
  45.       "/***** do not edit -- this file was generated mechanically *****/\n\n");
  46.    while (--argc > 0)
  47.       doinclude(*++argv);
  48.    exit(0);
  49.    }
  50.  
  51. doinclude(fname)
  52. char *fname;
  53.    {
  54.    FILE *f;
  55.    char line[MAXLINE], newname[MAXLINE], *p;
  56.    
  57.    fprintf(outfile, "\n\n/****************************************");
  58.    fprintf(outfile, "  from %s:  */\n\n", fname);
  59.    if (f = fopen(fname, "r")) {
  60.       while (fgets(line, MAXLINE, f))
  61.          if (sscanf(line, " # include \"%s\"", newname) == 1) {
  62.             for (p = newname; *p != '\0' && *p != '"'; p++)
  63.                ;
  64.             *p = '\0';                /* strip off trailing '"' */
  65.             doinclude(newname);            /* include file */
  66.             }
  67.          else
  68.             fputs(line, outfile);        /* not an include directive */
  69.       fclose(f);
  70.       }
  71.    else { 
  72.       fprintf(outfile, "/* [file not found] */\n");
  73.       }
  74.    fprintf(outfile, "\n/****************************************");
  75.    fprintf(outfile, "   end %s   */\n", fname);
  76.    }
  77.